package tree;
public class TreeLinkedTest {
	
	public static void main(String args[]){
		NTree<Integer> tree = new NTree<Integer>();
		TreeUtil<Integer> util = new TreeUtil<Integer>();
		
		Node<Integer> root = tree.addRoot(5);
		
		Node<Integer> n1 = tree.addChildren(root, 6);
		Node<Integer> n2 = tree.addChildren(root, 8);
		tree.addChildren(root, 9);
		
		tree.addChildren(n1, 12);
		tree.addChildren(n1, 7);
		tree.addChildren(n2, 67);
		tree.addChildren(n2, 4);
		tree.addChildren(n2, 3);
		
		System.out.println("Questo è l'albero n-ario:\n");
		util.stampa(tree);
		
		System.out.println("\nIl numero di nodi è " + tree.size());
		
		System.out.println("\nL'altezza dell'albero è " + util.height(tree));
		
		System.out.print("\nLa visita preOrder è questa: ");
		util.printPreOrder(tree);
		
		System.out.print("\nLa visita postOrder è questa: ");
		for (Node<Integer> w: util.visitPostOrder(tree))
			System.out.print(w.getElement() + " ");
		
		System.out.println("\n\nQuesto è l'albero binario:\n");
		
		BTree<Integer> lbtree = new BTree<Integer>();
		
		BNode<Integer> broot = lbtree.addRoot(5);
		BNode<Integer> bn1 = lbtree.insertLeft(broot, 4);
		BNode<Integer> bn2 = lbtree.insertRight(broot, 7);
		BNode<Integer> bn3 = lbtree.insertLeft(bn1, 2);
		lbtree.insertRight(bn1, 9);
		lbtree.insertLeft(bn2, 6);
		lbtree.insertRight(bn2, 8);
		lbtree.insertLeft(bn3, 1);
		lbtree.insertRight(bn3, 3);
		
		util.stampa(lbtree);

		System.out.println("\nIl numero di nodi è " + lbtree.size());

		System.out.println("\nL'altezza dell'albero è " + util.height(lbtree));
		
		System.out.print("\nLa visita preOrder è questa: ");
		util.printPreOrder(lbtree);
		
		System.out.print("\nLa visita postOrder è questa: ");
		for (Node<Integer> w: util.visitPostOrder(lbtree))
			System.out.print(w.getElement() + " ");
		
		System.out.print("\n\nLa visita inOrder è questa: ");
		util.printInOrder(lbtree);

		System.out.println();
	}	
}
